package Shifu.MainServer.Management;

import java.io.Serializable;

/**
 * Descrive una valore nella filetable,contiene il nome del file
 * il suo hash e il FilechunkedDescriptor
 */

public class Record implements Serializable {

	/* campi */

	private String filename;	//nome del file

	private String hashfile;	//hash del file

	private FileChunkedDescriptor fcd;	//descrittore del file

	private int keyposition;		//posizione nella tabella dei file

	/* costruttore */

	/**
	 * Instanzia un nuovo oggetto Record
	 * @param filename il nome del file
	 * @param hashfile l'hash del file
	 * @param fcd il filechunkeddescriptor del file
	 */

	public Record(String filename,String hashfile,FileChunkedDescriptor fcd) {
		this.filename = filename;
		this.hashfile = hashfile;
		this.fcd = fcd;
	}

	/* metodi */

	/**
	 * Imposta il nome del file
	 * @param name il nome del file	 
	 */

	public void setFileName(String name) {
		this.filename = name;
	}

	/**
	 * Imposta l'hash del file
	 * @param hash l'hash del file
	 */

	public void setHashFile(String hash) {		
		this.hashfile = hash;
	}	

	/**
	 * Imposta il filechunkedDescriptore del file
	 * @param fcd il filechunkedDescriptor
	 */

	public void setCfd(FileChunkedDescriptor cfd) {
		this.fcd = fcd;
	}


	/**
	 * Ritorna il nome del file
	 * @return nome del file
	 */

	public String getFileName() {
		return this.filename;
	}

	/**
	 * Ritorna l'hash del file
	 * @return l'hash del file
	 */

	public String getHashFile() {
		return this.hashfile;
	}

	/**
	 * Ritorna il filechunkedDescriptor
	 * @return fileChunkedDescriptor
	 */

	public FileChunkedDescriptor getFcd() {
		return this.fcd;
	}

	/**
         * Setta la posizione del record nella filetable
         * @param i posizione del file
         */
	
	public void setKeyPosition(int i) {
		this.keyposition = i;
	}

	/**
         * Ritorna la posizione del record nella filetable
         * @return la posizione
         */
	
	public int getKeyPosition(int i) {
		return this.keyposition;
	}

	/**
	 * Genera una stringa che indica lo stato del record
	 * @return la stringa
	 */

	public String toString() {
		return " Record::  Nomefile : "+this.filename+" | HashFile :  "+this.hashfile+" | FileChunckedDescriptor : "+this.fcd;
	}

	/**
         * Genera un stringa di descrizione del file molto ridotta
 	 * @return la stringa	 
         */

	public String smallString() {
		return  this.keyposition+": Nomefile : "+this.filename+" Dim: "+this.fcd.getDim_file()+"\n";
	} 
}
